package org.convallaria.system.biz.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.convallaria.infrastruct.db.entity.BaseEntity;

import java.io.Serial;

/**
 * 系统字典类型实体类
 * 
 * 功能特性：
 * - 支持数据字典类型管理
 * - 支持多租户数据隔离
 * - 支持软删除机制
 * - 支持乐观锁并发控制
 * - 支持数据审计追踪
 * - 支持字典类型状态管理
 * 
 * 业务说明：
 * - 字典类型是数据字典的基础组件
 * - 字典类型与字典数据是一对多关系
 * - 字典类型在同一租户内必须唯一
 * - 支持字典类型的启用和停用状态控制
 * - 停用的字典类型及其数据都不能被使用
 * 
 * 关联关系：
 * - 与字典数据表：一对多关系，通过dict_type关联
 * - 与租户表：多对一关系，通过tenant_id关联
 * 
 * 数据约束：
 * - dict_name：字典名称，必填
 * - dict_type：字典类型，在同一租户内唯一，必填
 * - status：字典状态，0=正常，1=停用
 * 
 * @author convallaria
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_dict_type")
public class SysDictType extends BaseEntity {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 字典主键
     * 主键，自增长
     */
    @TableId("dict_id")
    private Long dictId;

    /**
     * 字典名称
     * 字典类型显示名称，必填字段
     */
    @TableField("dict_name")
    private String dictName;

    /**
     * 字典类型
     * 字典类型唯一标识，在同一租户内必须唯一
     * 用于程序中的字典类型识别和访问
     */
    @TableField("dict_type")
    private String dictType;

    /**
     * 字典状态
     * 0=正常，1=停用
     * 停用的字典类型及其数据都不能被使用
     */
    @TableField("status")
    private String status;

    /**
     * 租户ID
     * 多租户数据隔离标识
     */
    @TableField("tenant_id")
    private Long tenantId;
}
